# ----读和写文件----
# open() 将会返回一个 file 对象，基本语法格式如下:
#
# open(filename, mode)
# filename：包含了你要访问的文件名称的字符串值。
# mode：决定了打开文件的模式：只读，写入，追加等。
# 所有可取值见如下的完全列表。这个参数是非强制的，默认文件访问模式为只读(r)。
# 不同模式打开文件的完全列表：
"""
r	    以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。

rb	    以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。

r+	    打开一个文件用于读写。文件指针将会放在文件的开头。

rb+	    以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。

w	    打开一个文件只用于写入。如果该文件已存在则打开文件，并从开头开始编辑，
        即原有内容会被删除。如果该文件不存在，创建新文件。

wb	    以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件，并从开头开始编辑，
        即原有内容会被删除。如果该文件不存在，创建新文件。

w+	    打开一个文件用于读写。如果该文件已存在则打开文件，并从开头开始编辑，
        即原有内容会被删除。如果该文件不存在，创建新文件。

wb+	    以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件，并从开头开始编辑，
        即原有内容会被删除。如果该文件不存在，创建新文件。

a	    打开一个文件用于追加。如果该文件已存在，文件指针将会放在文件的结尾。
        也就是说，新的内容将会被写入到已有内容之后。如果该文件不存在，创建新文件进行写入。

ab	    以二进制格式打开一个文件用于追加。如果该文件已存在，文件指针将会放在文件的结尾。
        也就是说，新的内容将会被写入到已有内容之后。如果该文件不存在，创建新文件进行写入。

a+	    打开一个文件用于读写。如果该文件已存在，文件指针将会放在文件的结尾。
        文件打开时会是追加模式。如果该文件不存在，创建新文件用于读写。

ab+	    以二进制格式打开一个文件用于追加。如果该文件已存在，文件指针将会放在文件的结尾。
        如果该文件不存在，创建新文件用于读写。
"""

str1 = input("请输入：");
print("你输入的内容是: ", str1)


# 第一个参数为要打开的文件名。
# 第二个参数描述文件如何使用的字符。
# mode 可以是 'r' 如果文件只读, 'w' 只用于写 (如果存在同名文件则将被删除),
# 和 'a' 用于追加文件内容; 所写的任何数据都会被自动增加到末尾. 'r+' 同时用于读写。
# mode 参数是可选的; 'r' 将是默认值。

f = open("input.txt", "w")

f.write("Python 是一个非常好的语言。\n是的，的确非常好!!\n" + str(str1))

# 关闭打开的文件
f.close()


# 文件对象的方法
# 本节中剩下的例子假设已经创建了一个称为 f 的文件对象。
#
# f.read()
# 为了读取一个文件的内容，调用 f.read(size), 这将读取一定数目的数据, 然后作为字符串或字节对象返回。
#
# size 是一个可选的数字类型的参数。 当 size 被忽略了或者为负, 那么该文件的所有内容都将被读取并且返回。
#
# 以下实例假定文件 input.txt 已存在（上面实例中已创建）：
f = open("input.txt", "r")

str2 = f.read()
print(str2)

# 关闭打开的文件
f.close()


# f.readline()
# f.readline() 会从文件中读取单独的一行。
# 换行符为 '\n'。f.readline() 如果返回一个空字符串, 说明已经已经读取到最后一行。

# 打开一个文件
f = open("input.txt", "r")

str3 = f.readline()
print(str3)

# 关闭打开的文件
f.close()


# f.readlines()
# f.readlines() 将返回该文件中包含的所有行。
#
# 如果设置可选参数 sizehint, 则读取指定长度的字节, 并且将这些字节按行分割。

# 打开一个文件
f = open("input.txt", "r")

str4 = f.readlines()
print(str4)

# 关闭打开的文件
f.close()


# 另一种方式是迭代一个文件对象然后读取每行:
#
# 实例
# #!/usr/bin/python3
#
# # 打开一个文件
# f = open("/tmp/foo.txt", "r")
#
# for line in f:
#     print(line, end='')
#
# # 关闭打开的文件
# f.close()
# 这个方法很简单, 但是并没有提供一个很好的控制。 因为两者的处理机制不同, 最好不要混用。
